<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>全局代码执行流程(Global code execution process)</title>
  <!-- 
  在JavaScript中，全球代码执行过程是指JavaScript代码在浏览器或其他JavaScript引擎中执行的步骤。理解这一过程有助于开发者更好地优化代码和调试。
  一、执行上下文（Execution Context）
  1. 定义：执行上下文是代码执行的环境。每当JavaScript代码被执行时，都会创建一个执行上下文。
  2. 类型：
    - 全局执行上下文：这是代码执行的默认上下文，只有一个全局上下文。
    - 函数执行上下文：每当函数被调用时，都会创建一个新的执行上下文。

  二、全局执行上下文的创建
  1. 创建阶段：
    - 变量对象（Variable Object）：在全局上下文中，创建一个全局对象（在浏览器中是window对象），并将所有的全局变量和函数声明添加到这个对象中。
    - 作用域链（Scope Chain）：全局上下文的作用域链被创建，包含全局对象的引用。
    - this 关键字：在全局上下文中，this 关键字指向全局对象（在浏览器中是window）。

  2. 执行阶段：
    - 在创建阶段完成后，JavaScript开始执行代码。
    - 代码按照书写顺序逐行执行，变量和函数会被解析和初始化。

  三、代码执行步骤
  1. 解析代码：
    - JavaScript引擎首先会解析代码，识别出变量声明、函数声明和其他语法结构。
    - 在此阶段，变量会被初始化为undefined，而函数会被存储在内存中。

  2. 执行代码：
    - 代码按照顺序执行，变量赋值、函数调用等操作会在此阶段进行。
    - 如果遇到函数调用，会创建一个新的函数执行上下文。

  3. 清理阶段：
    - 当执行上下文完成后，会被销毁，释放内存。
    - 如果是全局上下文，程序结束后，所有的全局变量和对象会被清理。
  
  总结
  - JavaScript的全局代码执行过程包括创建执行上下文、解析代码和执行代码三个主要阶段。
  - 在全局上下文中，变量和函数被创建并初始化，代码按照顺序执行。
  - 理解这一过程有助于开发者更好地管理作用域、内存和调试代码。
   -->
</head>
<body>

  <script>
    var message = "Global Message" // 变量声明

    function foo() { // 函数声明
      var message = "Foo Message"
      console.log("foo function")
    }

    var num1 = 10
    var num2 = 20
    var result = num1 + num2
    console.log(result)

    foo()
  </script>
  
</body>
</html>